home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 26
/
Cream of the Crop 26.iso
/
program
/
qbsnip.zip
/
KISSED.BAS
< prev
next >
Wrap
BASIC Source File
|
1997-05-04
|
25KB
|
998 lines
'_|_|_| KISSED.BAS
'_|_|_| Keep It Simple, Stupid EDitor [ Qbasic / QuickBasic ]
'_|_|_| Released to the PUBLIC DOMAIN by Kurt Kuzba (12/02/95)
DECLARE SUB DOCINIT (D%)
DECLARE SUB DOCOPN (F$, D%)
DECLARE SUB ALARM ()
DECLARE SUB CHECKMARK (D%, SH%)
DECLARE SUB CLIPBOARD ()
DECLARE SUB SHOWDOC (D%)
DECLARE SUB INFOBAR (D%)
DECLARE SUB CUTTEXT (D%)
DECLARE SUB ORDERMARK (D%, LA%, LZ%, CA%, CZ%)
DECLARE SUB NOISE ()
DECLARE SUB DELETETEXT (D%)
DECLARE SUB PUTLINE (D%, T$)
DECLARE FUNCTION DELLINE$ (D%)
DECLARE SUB PARMSINIT (D%)
DECLARE FUNCTION EDDOC% (D%)
DECLARE SUB INSLINE (D%, S$)
DECLARE SUB LINECAT (D%, L%)
DECLARE SUB SAVEQRY (D%)
DECLARE SUB LOADDOC (D%)
DECLARE SUB SAVEDOC (D%)
DECLARE SUB SETMARK (D%, SH%)
DECLARE SUB PASTETEXT (D%)
DECLARE SUB HELP ()
DECLARE FUNCTION GETKEY% ()
DECLARE FUNCTION GETLINE$ (D%)
DECLARE FUNCTION GETSTR$ (P$, D$, M%)
DECLARE FUNCTION MSG% (M$, P$)
DECLARE SUB SHOWLINE (D%, L%, S%)
CLEAR ' $DYNAMIC
TYPE TXT
L AS STRING * 80
END TYPE
TYPE PARMS
INS AS INTEGER
TOP AS INTEGER
LIN AS INTEGER
CRS AS INTEGER
TOT AS INTEGER
MLA AS INTEGER
MCA AS INTEGER
MLZ AS INTEGER
MCZ AS INTEGER
WID AS INTEGER
END TYPE
DIM SHARED D0(800) AS TXT
DIM SHARED D1(800) AS TXT
DIM SHARED D2(800) AS TXT
DIM SHARED CFG(3) AS PARMS
DIM SHARED DOC$(6)
DOC$(1) = COMMAND$
DOC$(2) = ""
DOCINIT 0
DOCINIT 1
DOCINIT 2
DOC$(4) = ""
DOC$(5) = "INS"
IF DOC$(1) <> "" THEN
DOCOPN DOC$(1), 1
ELSE
DOC$(1) = "text1.txt"
END IF
ED% = 1
WHILE ED% <> 0
ED% = EDDOC%(ED%)
WEND
COLOR 2, 0
CLS
SYSTEM
WHATTHE:
DOC$(3) = STR$(ERR)
RESUME NEXT
REM $STATIC
'
SUB ALARM
FOR T% = 0 TO 25
SOUND 2200 + 2 * T%, .1
SOUND 2225 + T%, .05
NEXT
END SUB
SUB CHECKMARK (D%, SH%)
IF SH% THEN
IF CFG(D%).MCA = 0 THEN
CFG(D%).MLA = CFG(D%).LIN
CFG(D%).MLZ = CFG(D%).LIN
CFG(D%).MCA = CFG(D%).CRS
CFG(D%).MCZ = CFG(D%).CRS
END IF
ELSE
CFG(D%).MCA = 0
END IF
END SUB
SUB CLIPBOARD
CFG(0).LIN = 0
CFG(0).CRS = 1
K% = 0
DOC$(0) = "CLIPBOARD [ESC] TO EXIT"
WHILE K% <> 27
L% = CFG(0).LIN
CFG(0).MCA = 1
CFG(0).MCZ = 80
CFG(0).MLA = L%
CFG(0).MLZ = L%
SHOWDOC 0
INFOBAR 0
K% = GETKEY%
SELECT CASE K%
CASE -71 '__HOME*
CFG(0).LIN = 0
CFG(0).TOP = 0
CASE -79 '__END*
L% = CFG(0).TOT - 23
IF L% < 0 THEN L% = 0
CFG(0).TOP = L%
CFG(0).LIN = CFG(0).TOT - 1
CASE -73:
IF L% <> 0 THEN
C% = L% - 24
CFG(0).LIN = -C% * (C% >= 0)
C% = CFG(0).TOP - 24
CFG(0).TOP = -C% * (C% >= 0)
END IF
CASE -81 '__PAGE DOWN*
T% = CFG(D%).TOT - 1
P% = T% - 23
L% = L% + 24
IF L% <= (T% + 23) THEN
IF L% > T% THEN L% = T%
CFG(0).LIN = L%
L% = CFG(0).TOP + 24
IF L% > P% THEN L% = P%
CFG(0).TOP = -L% * (L% >= 0)
END IF
CASE -72 '__CRSR UP*
L% = L% - 1
IF L% >= 0 THEN
CFG(0).LIN = L%
IF CFG(0).TOP > L% THEN CFG(0).TOP = L%
END IF
CASE -80 '__CURSOR DOWN*
L% = L% + 1
IF L% < CFG(0).TOT THEN
CFG(0).LIN = L%
T% = CFG(0).TOP
IF L% > (T% + 23) THEN CFG(0).TOP = T% + 1
END IF
END SELECT
WEND
END SUB
SUB CUTTEXT (D%)
IF CFG(D%).MCA = 0 THEN
T% = MSG%("No Text Marked", "")
EXIT SUB
END IF
ORDERMARK D%, LA%, LZ%, CA%, CZ%
DOCINIT 0
R% = CFG(D%).LIN
I% = LZ% - LA%
CFG(0).TOT = I% + 1
FOR L% = 0 TO I%
CFG(0).LIN = L%
CFG(D%).LIN = LA% + L%
T$ = GETLINE$(D%)
IF L% = I% THEN T$ = LEFT$(T$, CZ%)
IF L% = 0 THEN T$ = MID$(T$, CA%)
D0(L%).L = T$
NEXT
CFG(D%).LIN = R%
NOISE
END SUB
SUB DELETETEXT (D%)
IF CFG(D%).MCA = 0 THEN
T% = MSG%("No Text Marked", "")
EXIT SUB
END IF
ORDERMARK D%, LA%, LZ%, CA%, CZ%
L% = LZ% - LA%
R% = LA%
CFG(D%).CRS = CA%
CFG(D%).MCA = 0
CFG(D%).LIN = LA%
T$ = MID$(LEFT$(" " + GETLINE$(D%), CA%), 2)
CFG(D%).LIN = LZ%
P$ = RTRIM$(MID$(GETLINE$(D%), CZ% + 1))
B$ = T$ + P$
IF LA% = LZ% THEN
IF B$ = "" THEN
B$ = DELLINE$(D%)
ELSE
PUTLINE D%, B$
END IF
END IF
IF LZ% > LA% THEN
IF P$ = "" THEN
LZ% = LZ% + 1
ELSE
PUTLINE D%, P$
END IF
IF T$ <> "" THEN
CFG(D%).LIN = LA%
LA% = LA% + 1
PUTLINE D%, T$
END IF
END IF
IF LA% < LZ% THEN
L% = LZ% - LA%
Z% = CFG(D%).TOT - L%
CFG(D%).TOT = Z%
FOR T% = LA% TO Z%
IF D% = 1 THEN D1(T%).L = D1(T% + L%).L
IF D% = 2 THEN D2(T%).L = D2(T% + L%).L
NEXT
FOR T% = Z% TO 799
IF D% = 1 THEN D1(T%).L = ""
IF D% = 2 THEN D2(T%).L = ""
NEXT
END IF
CFG(D%).LIN = R%
R% = R% - 1
IF CFG(D%).TOT < 0 THEN CFG(D%).TOT = 1
IF R% + 25 > CFG(D%).TOT THEN R% = CFG(D%).TOT - 24
CFG(D%).TOP = R% * -(R% >= 0)
NOISE
END SUB
FUNCTION DELLINE$ (D%)
L% = CFG(D%).LIN
E% = CFG(D%).TOT - 1
IF D% = 1 THEN
DELLINE$ = RTRIM$(D1(CFG(1).LIN).L)
FOR T% = L% TO E% - 1
D1(T%).L = D1(T% + 1).L
NEXT
D1(E%).L = SPACE$(80)
END IF
IF D% = 2 THEN
DELLINE$ = RTRIM$(D2(CFG(2).LIN).L)
FOR T% = L% TO E% - 1
D2(T%).L = D2(T% + 1).L
NEXT
D2(E%).L = SPACE$(80)
END IF
CFG(D%).TOT = E% - (E% = L%)
SHOWDOC D%
END FUNCTION
SUB DOCINIT (D%)
FOR T% = 0 TO 799
IF D% = 0 THEN D0(T%).L = ""
IF D% = 1 THEN D1(T%).L = ""
IF D% = 2 THEN D2(T%).L = ""
NEXT
PARMSINIT D%
END SUB
SUB DOCOPN (F$, D%)
ON ERROR GOTO WHATTHE
T% = 1
DOC$(3) = "ok"
IF F$ <> "" THEN OPEN F$ FOR INPUT AS #1
T$ = "File Error :: " + F$ + " :: Hit a Key"
IF DOC$(3) <> "ok" THEN
T% = MSG%(T$, "")
EXIT SUB
END IF
WHILE T% = 1
L% = 0
DOCINIT D%
WHILE ((L% < 800) AND (NOT EOF(1)))
LINE INPUT #1, P$
P$ = RTRIM$(P$)
CFG(D%).LIN = L%
WHILE INSTR(P$, CHR$(9)) <> 0
P% = INSTR(P$, CHR$(9))
T$ = MID$(P$, P% + 1)
T$ = " " + T$
IF P% > 1 THEN T$ = LEFT$(P$, P% - 1) + T$
P$ = T$
WEND
IF LEN(P$) > 79 THEN
IF L% < 799 THEN
PUTLINE D%, LEFT$(P$, 79)
P$ = MID$(P$, 80)
L% = L% + 1
CFG(D%).LIN = L%
END IF
P$ = LEFT$(P$, 79)
END IF
PUTLINE D%, P$
L% = L% + 1
WEND
T$ = "File too large. Load next section (Y/N)?"
IF (NOT EOF(1)) THEN
T% = MSG%(T$, "yn")
ELSE
T% = 0
END IF
WEND
CLOSE 1
CFG(D%).TOT = L%
CFG(D%).LIN = 0
ALARM
DOC$(D%) = UCASE$(F$)
END SUB
FUNCTION EDDOC% (D%)
DEF SEG = 0
EDDOC% = D%
IF D% = 0 THEN GOTO CYCLE
SHOWDOC D%
EDIT$ = "YES"
S$ = SPACE$(80)
WHILE EDIT$ = "YES"
T$ = GETLINE$(D%) + S$
L% = CFG(D%).LIN
C% = CFG(D%).CRS
SHOWDOC D%
INFOBAR D%
LOCATE L% - CFG(D%).TOP + 2, C%, 1, 13 * CFG(D%).INS, 13
K% = GETKEY%
SH% = ((PEEK(&H417) AND 3) <> 0)
W% = CFG(D%).WID
IF K% = 9 THEN
T$ = LEFT$(T$, C% - 1) + SPACE$(9) + MID$(T$, C%)
K% = 32
C% = C% + 9
END IF
SELECT CASE K%
CASE 32 TO 254 '__TEXT*
IF CFG(D%).INS <> 0 THEN MID$(T$, C% + 1) = MID$(T$, C%)
MID$(T$, C%) = CHR$(K%)
T$ = RTRIM$(T$)
IF (LEN(T$) > W%) THEN
P$ = MID$(T$, W% + 1)
T$ = LEFT$(T$, W%)
T% = 0
WHILE T% = 0
R$ = RIGHT$(T$, 1)
L% = LEN(T$)
T% = INSTR("*+\]}:)/- ", R$) - (L% < (W% * .75))
IF T% = 0 THEN
P$ = R$ + P$
T$ = LEFT$(T$, L% - 1)
END IF
WEND
PUTLINE D%, T$
L% = CFG(D%).LIN
T% = LEN(T$)
IF L% < 799 THEN
CFG(D%).LIN = L% + 1
INSLINE D%, P$
END IF
IF C% > W% AND L% < 799 THEN
C% = C% - T%
L% = L% + 1
END IF
CFG(D%).LIN = L%
IF C% > W% AND L% > 788 THEN C% = T%
ELSE
PUTLINE D%, T$
END IF
CFG(D%).CRS = C% + 1
CASE 8 '__BACKSPACE*
L% = CFG(D%).LIN
T% = LEN(RTRIM$(T$))
IF (C% = 1) AND (L% = 0) THEN GOTO CYCLE
IF C% > 1 THEN
IF T% <> 0 THEN MID$(T$, C% - 1) = MID$(T$, C%) + " "
CFG(D%).CRS = C% - 1
PUTLINE D%, T$
ELSE
LINECAT D%, L% - 1
END IF
CASE -83 '__DELETE*
T% = LEN(RTRIM$(T$))
IF C% <= T% THEN
MID$(T$, C%) = MID$(T$, C% + 1) + " "
PUTLINE D%, T$
ELSE
LINECAT D%, CFG(D%).LIN
END IF
CASE -82 '__INSERT*
T$ = DOC$(6)
IF SH% THEN
IF T$ <> "" THEN
INSLINE D%, T$
CFG(D%).CRS = 1
END IF
ELSE
CFG(D%).INS = ABS(CFG(D%).INS - 1)
NOISE
END IF
CASE 13 '__ENTER*
L% = CFG(D%).LIN
IF L% >= 799 THEN GOTO CYCLE
IF C% = 1 THEN
P$ = ""
ELSE
P$ = LEFT$(T$, C% - 1)
END IF
PUTLINE D%, P$
CFG(D%).LIN = L% + 1
INSLINE D%, MID$(T$, C%)
CFG(D%).CRS = 1
CASE -61, -38 '__ALT/L or F3*
SAVEQRY D%
LOADDOC D%
GOTO CYCLE
CASE -60, -31 '__ALT/S or F2*
SAVEDOC D%
CASE 27, -45 '__ESCAPE or CTRL/X : exit editor*
EDIT$ = "NO"
CASE -94 '__CTRL/F1 : switch to Document 1*
IF DOC$(1) = "" THEN DOC$(1) = "text1.txt"
EDDOC% = 1
GOTO CYCLE
CASE -95 '__CTRL/F2 : switch to Document 2*
IF DOC$(2) = "" THEN DOC$(2) = "text2.txt"
EDDOC% = 2
GOTO CYCLE
CASE -96 '__CTRL/F3*
CLIPBOARD
CASE 25 '__CTRL/Y*
DOC$(6) = DELLINE$(D%)
CFG(D%).CRS = 1
CASE -71 '__HOME*
CHECKMARK D%, SH%
CFG(D%).CRS = 1
SETMARK D%, SH%
CASE -79 '__END*
CHECKMARK D%, SH%
C% = LEN(RTRIM$(T$)) + 1
CFG(D%).CRS = -C% * (C% < 81) - 80 * (C% > 80)
SETMARK D%, SH%
CASE -119 '__CTRL/HOME*
CHECKMARK D%, SH%
CFG(D%).CRS = 1
CFG(D%).LIN = CFG(D%).TOP
SETMARK D%, SH%
CASE -117 '__CTRL/END*
CHECKMARK D%, SH%
C% = CFG(D%).TOP + 23
T% = CFG(D%).TOT - 1
IF C% >= T% THEN C% = T%
CFG(D%).LIN = C%
T$ = RTRIM$(GETLINE$(D%))
T% = LEN(T$)
CFG(D%).CRS = T% - (T% < 80)
SETMARK D%, SH%
CASE -132 '__CTRL/PAGE UP*
CHECKMARK D%, SH%
CFG(D%).TOP = 0
CFG(D%).LIN = 0
CFG(D%).CRS = 1
SETMARK D%, SH%
CASE -118 '__CTRL/PAGE DOWN*
CHECKMARK D%, SH%
C% = CFG(D%).TOT
CFG(D%).TOP = -(C% - 24) * (C% > 23)
CFG(D%).LIN = C% - 1
CFG(D%).CRS = 1
SETMARK D%, SH%
CASE -73 '__PAGE UP*
CHECKMARK D%, SH%
IF L% = 0 THEN GOTO CYCLE
C% = L% - 24
CFG(D%).LIN = -C% * (C% >= 0)
C% = CFG(D%).TOP - 24
CFG(D%).TOP = -C% * (C% >= 0)
SETMARK D%, SH%
CASE -81 '__PAGE DOWN*
CHECKMARK D%, SH%
T% = CFG(D%).TOT - 1
P% = T% - 23
L% = CFG(D%).LIN + 24
IF L% > (T% + 23) THEN GOTO CYCLE
IF L% > T% THEN L% = T%
CFG(D%).LIN = L%
L% = CFG(D%).TOP + 24
IF L% > P% THEN L% = P%
CFG(D%).TOP = -L% * (L% >= 0)
SETMARK D%, SH%
CASE -72 '__CRSR UP*
CHECKMARK D%, SH%
L% = L% - 1
IF L% < 0 THEN GOTO CYCLE
CFG(D%).LIN = L%
IF CFG(D%).TOP > L% THEN CFG(D%).TOP = L%
SETMARK D%, SH%
CASE -80 '__CURSOR DOWN*
CHECKMARK D%, SH%
L% = L% + 1
IF L% >= CFG(D%).TOT THEN GOTO CYCLE
CFG(D%).LIN = L%
T% = CFG(D%).TOP
IF L% > (T% + 23) THEN CFG(D%).TOP = T% + 1
SETMARK D%, SH%
CASE -75 '__CURSOR LEFT*
CHECKMARK D%, SH%
IF C% = 1 THEN GOTO CYCLE
CFG(D%).CRS = C% - 1
SETMARK D%, SH%
CASE -77 '__CURSOR RIGHT*
CHECKMARK D%, SH%
IF C% > 79 THEN GOTO CYCLE
CFG(D%).CRS = C% + 1
SETMARK D%, SH%
CASE -46 '__ALT/C :: CUT TEXT*
CUTTEXT D%
CASE -32 '__ALT/D :: DELETE TEXT*
DELETETEXT D%
CASE -25 '__ALT/P :: PASTE TEXT*
PASTETEXT D%
CASE -59, -35 '__ALT/H OR F1 :: HELP*
HELP
CASE -115 '__CTRL/LEFT*
CFG(D%).WID = W% + (W% > 10)
CASE -116 '__CTRL/RIGHT*
CFG(D%).WID = W% - (W% < 79)
END SELECT
WEND
T$ = CHR$(13) + "yn " + CHR$(27)
SAVEQRY D%
EDDOC% = -D% * (MSG("Exit KISSED (Y/N)?", T$) > 2)
CYCLE:
NOISE
DEF SEG
END FUNCTION
FUNCTION GETKEY%
T$ = ""
WHILE T$ = ""
T$ = INKEY$
WEND
GETKEY% = ASC(T$)
IF ASC(T$) = 0 THEN GETKEY% = -ASC(MID$(T$, 2))
END FUNCTION
FUNCTION GETLINE$ (D%)
GETLINE$ = ""
IF D% = 1 THEN GETLINE$ = D1(CFG(1).LIN).L
IF D% = 2 THEN GETLINE$ = D2(CFG(2).LIN).L
END FUNCTION
FUNCTION GETSTR$ (P$, D$, M%)
PCOPY 0, 1
SCREEN , , 1, 1
L% = 7 + LEN(P$) + M%
INS% = 1
Y% = 40 - L% \ 2
X% = 11
COLOR 9, 1
LOCATE X%, Y%
FOR T% = 1 TO 3
LOCATE , Y%
PRINT STRING$(L%, CHR$(176))
NEXT
LOCATE X% + 1, Y% + 2
COLOR 15, 4
PRINT " "; P$; " ";
X% = CSRLIN
Y% = POS(0)
PRINT SPACE$(M% + 1);
D$ = LEFT$(D$ + SPACE$(M%), M%)
B$ = CHR$(29)
P% = (LEN(RTRIM$(D$)) MOD M%) + 1
WHILE T% <> 13
LOCATE , Y%, 0
COLOR 14, 4
PRINT D$;
COLOR 1, 7
LOCATE , Y% + P% - 1, INS%, 13, 13
PRINT MID$(D$, P%, 1); B$;
T% = GETKEY%
SELECT CASE T%
CASE 32 TO 127
IF INS% <> 0 THEN D$ = LEFT$(LEFT$(D$, P%) + MID$(D$, P%), M%)
MID$(D$, P%) = CHR$(T%)
IF P% < M% THEN P% = (P% MOD M%) + 1
CASE 8
IF P% > 1 THEN MID$(D$, P% - 1) = MID$(D$, P%) + " "
P% = P% + (P% > 1)
IF P% = 1 THEN SOUND 1000, .1
CASE 27
D$ = ""
T% = 13
CASE -82
INS% = ABS(INS% - 1)
CASE -83
MID$(D$, P%) = MID$(D$, P% + 1) + " "
CASE -75
P% = ((P% - 2 + M%) MOD M%) + 1
CASE -77
P% = (P% MOD M%) + 1
CASE 25
D$ = SPACE$(M%)
P% = 1
CASE -71
P% = 1
CASE -79
P% = LEN(RTRIM$(D$))
P% = P% - (P% <> M%)
END SELECT
WEND
SCREEN , , 0, 0
GETSTR$ = RTRIM$(D$)
END FUNCTION
SUB HELP
SCREEN , , 1, 1
COLOR 11, 1
CLS
T$ = STRING$(80, CHR$(177))
FOR T% = 1 TO 25
LOCATE T%, 1
PRINT T$;
NEXT
COLOR 14, 0
LOCATE 3, 7, 0
PRINT "____NORMAL KEYS_______________"
LOCATE , 7
PRINT " Left Arrow (Cursor Left) "
LOCATE , 7
PRINT " Right Arrow (Cursor Right) "
LOCATE , 7
PRINT " Up Arrow (Cursor Up) "
LOCATE , 7
PRINT " Down Arrow (Cursor Down) "
LOCATE , 7
PRINT " Page Up (Cursor Page UP) "
LOCATE , 7
PRINT " Page Down (Cursor Page Down) "
LOCATE , 7
PRINT " Home (Cursor Home) "
LOCATE , 7
PRINT " End (Cursor End) "
LOCATE , 7
PRINT " Insert (Toggle Insert) "
LOCATE , 7
PRINT " Delete (Delete) "
LOCATE , 7
PRINT " F1 (Help) "
LOCATE , 7
PRINT " F2 (Save Text) "
LOCATE , 7
PRINT " F3 (Load Text) "
LOCATE , 7
PRINT " ESCAPE (EXIT EDITOR) "
LOCATE 19, 7
PRINT "____SHIFT KEYS________________"
LOCATE , 7
PRINT " Insert (Insert CTRL/Y Line) "
LOCATE , 7
PRINT " Any Cursor movement key "
LOCATE , 7
PRINT " with SHIFT will mark text. "
LOCATE 3, 45
PRINT "____CONTROL KEYS______________"
LOCATE , 45
PRINT " F1 (Document 1) "
LOCATE , 45
PRINT " F2 (Document 2) "
LOCATE , 45
PRINT " F3 (View Clipboard) "
LOCATE , 45
PRINT " Home (Page Top) "
LOCATE , 45
PRINT " End (Page Bottom) "
LOCATE , 45
PRINT " Page Up (Text top) "
LOCATE , 45
PRINT " Page Down (Text Bottom) "
LOCATE , 45
PRINT " Left Arrow (-line length) "
LOCATE , 45
PRINT " Right Arrow (+line length) "
LOCATE , 45
PRINT " CTRL/Y (Delete Line) "
LOCATE 17, 45
PRINT "____ALT KEYS__________________"
LOCATE , 45
PRINT " ALT/H (Help) "
LOCATE , 45
PRINT " ALT/C (Copy To Clipboard) "
LOCATE , 45
PRINT " ALT/D (Delete Marked Text) "
LOCATE , 45
PRINT " ALT/P (Paste ClipBoard) "
LOCATE , 45
PRINT " ALT/X (EXIT) "
T% = GETKEY%
SCREEN , , 0, 0
END SUB
SUB INFOBAR (D%)
P$ = SPACE$(80)
MID$(P$, 7) = "l" + MID$(STR$(CFG(D%).LIN + 1), 2)
MID$(P$, 27) = STR$(CFG(D%).TOT) + " lines"
MID$(P$, 40) = DOC$(D%)
MID$(P$, 24) = CHR$(64 + D%)
MID$(P$, 18) = DOC$(CFG(D%).INS + 4)
MID$(P$, 13) = "w" + MID$(STR$(CFG(D%).WID), 2)
LOCATE 1, 1
MID$(P$, 2) = "c" + MID$(STR$(CFG(D%).CRS), 2)
COLOR 15, 1
PRINT P$;
END SUB
SUB INSLINE (D%, S$)
L% = CFG(D%).LIN
IF D% = 1 THEN
FOR T% = 799 TO L% + 1 STEP -1
D1(T%).L = D1(T% - 1).L
NEXT
D1(CFG(1).LIN).L = S$
END IF
IF D% = 2 THEN
FOR T% = 799 TO L% + 1 STEP -1
D2(T%).L = D2(T% - 1).L
NEXT
D2(CFG(2).LIN).L = S$
END IF
IF CFG(D%).TOT < 800 THEN CFG(D%).TOT = CFG(D%).TOT + 1
SHOWDOC D%
END SUB
SUB LINECAT (D%, L%)
R% = CFG(D%).LIN
CFG(D%).LIN = L% + 1
P$ = RTRIM$(GETLINE$(D%))
C% = CFG(D%).CRS
CFG(D%).LIN = L%
T$ = GETLINE$(D%)
IF R% = L% THEN T$ = LEFT$(T$, C% - 1)
IF R% <> L% THEN
T$ = RTRIM$(T$)
CFG(D%).CRS = LEN(T$) + 1
END IF
T$ = T$ + P$
T% = LEN(T$)
IF T% < 80 THEN P$ = DELLINE$(D%)
IF LEN(T$) > 79 THEN
CFG(D%).LIN = L% + 1
PUTLINE D%, MID$(T$, 80)
END IF
CFG(D%).LIN = L%
PUTLINE D%, LEFT$(T$, 79)
SHOWDOC D%
END SUB
SUB LOADDOC (D%)
DN$ = GETSTR$("Load File?", "", 32)
IF DN$ <> "" THEN DOCOPN DN$, D%
END SUB
FUNCTION MSG% (M$, P$)
M% = LEN(M$)
P$ = UCASE$(P$)
PCOPY 0, 1
SCREEN , , 1, 1
IF P$ = "" THEN P$ = CHR$(13) + CHR$(27) + " "
WHILE INKEY$ <> ""
WEND
C% = 37 - (M% + 1) \ 2
LOCATE 10, C%
COLOR 9, 1
LOCATE 11, C%, 0
PRINT STRING$(M% + 6, CHR$(176))
LOCATE , C%
PRINT CHR$(176); CHR$(176);
COLOR 14, 4
PRINT " "; M$; " ";
COLOR 9, 1
PRINT CHR$(176); CHR$(176)
LOCATE , C%
PRINT STRING$(M% + 6, CHR$(176))
ALARM
T% = 0
WHILE INSTR(P$, UCASE$(CHR$(T%))) < 1
T% = GETKEY%
WEND
SCREEN , , 0, 0
MSG% = INSTR(P$, UCASE$(CHR$(T%)))
END FUNCTION
SUB NOISE
SOUND 1000, .1
END SUB
SUB ORDERMARK (D%, LA%, LZ%, CA%, CZ%)
CA% = CFG(D%).MCA
LA% = CFG(D%).MLA
CZ% = CFG(D%).MCZ
LZ% = CFG(D%).MLZ
LA& = LA%
LZ& = LZ%
LA& = LA& * 80 + CA%
LZ& = LZ& * 80 + CZ%
IF LA& > LZ& THEN
SWAP LA%, LZ%
SWAP CA%, CZ%
END IF
END SUB
SUB PARMSINIT (D%)
CFG(D%).INS = 1
CFG(D%).TOP = 0
CFG(D%).LIN = 0
CFG(D%).CRS = 1
CFG(D%).TOT = 1
CFG(D%).MLA = 0
CFG(D%).MCA = 0
CFG(D%).MLZ = 0
CFG(D%).MCZ = 0
CFG(D%).WID = 70
END SUB
SUB PASTETEXT (D%)
IF CFG(0).TOT = 1 AND RTRIM$(D0(0).L) = "" THEN
T% = MSG%("No text in Clipboard", "")
EXIT SUB
END IF
L% = CFG(D%).LIN
R% = L%
C% = CFG(D%).CRS
CFG(D%).MCA = 0
O% = CFG(0).TOT
I% = O% - 1
E% = CFG(D%).TOT
IF (C% > 1) AND (I% = 0) THEN
T$ = GETLINE$(D%) + SPACE$(80)
T$ = RTRIM$(LEFT$(T$, C% - 1) + RTRIM$(D0(0).L) + MID$(T$, C%))
PUTLINE D%, LEFT$(T$, 79)
IF LEN(T$) > 79 AND L% < 799 THEN
CFG(D%).LIN = L% + 1
INSLINE D%, MID$(T$, 80)
CFG(D%).LIN = L%
END IF
NOISE
EXIT SUB
END IF
FOR T% = 799 TO L% STEP -1
IF T% - 0 >= 0 THEN
IF D% = 1 THEN D1(T%).L = D1(T% - O%).L
IF D% = 2 THEN D2(T%).L = D2(T% - O%).L
END IF
NEXT
FOR T% = 0 TO I%
IF D% = 1 THEN D1(T% + L%).L = D0(T%).L
IF D% = 2 THEN D2(T% + L%).L = D0(T%).L
NEXT
CFG(D%).TOT = E% + O%
IF E% + O% > 800 THEN CFG(D%).TOT = 800
NOISE
END SUB
SUB PUTLINE (D%, T$)
IF D% = 1 THEN D1(CFG(D%).LIN).L = LEFT$(T$ + SPACE$(80), 80)
IF D% = 2 THEN D2(CFG(D%).LIN).L = LEFT$(T$ + SPACE$(80), 80)
END SUB
SUB SAVEDOC (D%)
ON ERROR GOTO WHATTHE
DOC$(3) = "ok"
L% = CFG(D%).LIN
CFG(D%).LIN = 0
T% = CFG(D%).TOT
P$ = RTRIM$(GETLINE$(D%))
IF P$ = "" AND T% = 1 THEN
T% = MSG%("No Text", "")
EXIT SUB
END IF
DN$ = DOC$(D%)
DN$ = GETSTR$("Save As?", DN$, 32)
IF DN$ = "" THEN
CFG(D%).LIN = L%
EXIT SUB
END IF
DOC$(D%) = DN$
OPEN DN$ FOR OUTPUT AS #1
IF DOC$(3) <> "ok" THEN
T% = MSG%("File Error :: Hit a Key", "")
ELSE
FOR P% = 0 TO T% - 1
CFG(D%).LIN = P%
P$ = RTRIM$(GETLINE$(D%))
IF P$ = "" THEN P$ = " "
PRINT #1, P$
NEXT
CFG(D%).LIN = L%
ALARM
CLOSE 1
END IF
END SUB
SUB SAVEQRY (D%)
L% = CFG(D%).LIN
CFG(D%).LIN = 0
T% = CFG(D%).TOT
CFG(D%).LIN = L%
P$ = RTRIM$(GETLINE$(D%))
IF P$ = "" AND T% = 1 THEN
NOISE
EXIT SUB
END IF
T% = MSG%("Save Current Document (Y:N)?", " ny" + CHR$(13))
IF T% > 2 THEN
NOISE
SAVEDOC D%
ELSE
ALARM
END IF
END SUB
SUB SETMARK (D%, SH%)
IF SH% = 0 THEN EXIT SUB
L% = CFG(D%).LIN
C% = CFG(D%).CRS
L& = L%
L& = L& * 80 + C%
A% = CFG(D%).MLA
A& = A%
A& = A% * 80 + CFG(D%).MCA
CFG(D%).MLZ = L%
CFG(D%).MCZ = C%
END SUB
SUB SHOWDOC (D%)
L% = CFG(D%).LIN
T% = CFG(D%).TOP
COLOR 10, 0
LOCATE , , 0
IF T% + 23 < L% THEN
T% = L% - 23
CFG(D%).TOP = T%
END IF
FOR B% = 0 TO 23
L% = B% + T%
IF L% > 799 THEN
LOCATE 2 + B%, 1
PRINT SPACE$(80);
ELSE
SHOWLINE D%, L%, 2 + B%
END IF
NEXT
END SUB
SUB SHOWLINE (D%, L%, S%)
LA% = 0
LZ% = 0
CA% = 0
CZ% = 0
IF CFG(D%).MCA <> 0 THEN ORDERMARK D%, LA%, LZ%, CA%, CZ%
IF D% = 0 THEN T$ = D0(L%).L + SPACE$(80)
IF D% = 1 THEN T$ = D1(L%).L + SPACE$(80)
IF D% = 2 THEN T$ = D2(L%).L + SPACE$(80)
LOCATE S%, 1
COLOR 10, 0
IF CA% = 0 OR (LA% > L%) OR (LZ% < L%) THEN
PRINT LEFT$(T$, 80);
ELSE
IF LA% = LZ% THEN
IF CA% > 1 THEN PRINT LEFT$(T$, CA% - 1);
COLOR 0, 3
PRINT MID$(T$, CA%, CZ% - CA% + 1);
COLOR 10, 0
PRINT MID$(T$, CZ% + 1, 80 - CZ%);
ELSE
IF (L% > LA%) AND (L% < LZ%) THEN
COLOR 0, 3
PRINT LEFT$(T$, 80);
ELSE
IF L% = LA% THEN
IF CA% > 1 THEN PRINT LEFT$(T$, CA% - 1);
COLOR 0, 3
PRINT MID$(T$, CA%, 81 - CA%);
ELSE
COLOR 0, 3
PRINT LEFT$(T$, CZ%);
COLOR 10, 0
PRINT MID$(T$, CZ% + 1, 80 - CZ%);
END IF
END IF
END IF
END IF
END SUB